<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div>div</div>
<p>p</p>
<div>div</div>
<span>span</span>
<p>p</p>
<div>div</div>
</body>
<script>
    function isArray(obj) {
        if (Object.prototype.toString.call(obj) == '[object Array]') {
            return true;
        }
        var length = "length" in obj && obj.length;
        return typeof length === "number" && length >= 0;
    }
    function each(arr, callback) {
        if (isArray(arr)) {
            for (var i = 0; i < arr.length; i++) {
                if (callback.call(arr[i], arr[i], i) === false) {
                    break;
                } else {
                    for (var k in arr) {
                        if (callback.call(arr[k], arr[k], k) === false)break;
                    }
                }
                return arr;
            }
        }
    }

    function select( selector ) {
        var array = document.querySelectorAll( selector ); // 伪数组

        array.each = function ( callback ) {
            // 要求遍历 obj, 怎么遍历??? 使用 callback 处理伪数组 obj 中的每一个元素
            each( this, callback );
            // this 是什么, 看谁调用的方法
        };

        return array;
    }

    select("div,p").each(function(v){
        v.style.border = '1px solid blue';
        return false;
    });
</script>
</html>